perm filename XGPTST.FAI[XGP,BGB] blob
sn#041586 filedate 1973-05-11 generic text, type T, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
RECORD PAGE DESCRIPTION
00001 00001
00002 00002 TITLE BUFFER DOROTHY BENDER ****** GARPLY *******
00009 ENDMK
⊗;
TITLE BUFFER; DOROTHY BENDER ****** GARPLY *******
; ROUTINE TO READ THE OUTPUT FROM THE MUSIC
; PROGRAM AND CALL THE D-A CONVERTER TO PLAY.
;
; THE NAME OF THE FILE TO BE INPUTTED IS 'MUSIC',
; THE FIRST RECORD OF WHICH CONTAINS THE
; NUMBER OF WORDS OF DATA IN THE ENTIRE DISK FILE.
A ← 1 ;WORK
B ← 2 ;WORK
RET ← 3 ;RETURN ACCUMULATOR
BUFSIZ ←=20224
↓DSKCHN ←1 ;DISK CHANNEL FOR INPUT
↓ADCHN ←2 ;D-A CHANNEL FOR OUTPUT
OPDEF READCH [51B8]
OPDEF MESSAGE[51B8!3B12]
BEG: CALLI 0,0 ;RESET I/O DEVICES
OPEN DSKCHN,[17 ;MODE
'DSK ' ;DEVICE NAME
0] ;NO BUFFER HEADERS
HALT BEG ;RESTART IF DEVICE IS UNAVAILABLE
SETZM FILBLK+3 ;FOR RESTART
SETZM FILBL2+3 ;FOR RESTART
LX:; MESSAGE [ASCIZ/
; TYPE `P' TO PLAY FROM DISK, `C' TO COPY TAPE TO DISK.
;/]
; readch a
; cain a,"C"
; jrst start
; caie a,"P"
; jrst lx
skipe filblk+3 ;is this first time through ?
jrst pla2 ;No. Parameters already set up.
;FIND OUT NUMBER OF CHANNELS AND
;THE SPEED.
; MESSAGE [ASCIZ/HOW MANY CHANNELS?/]
; READCH A
; SUBI A,"0"+1 ;CONVERT TO BINR AND ADD 1
; DPB A,[POINT 2,OUTBIT,26]
;
; MESSAGE [ASCIZ/WHAT IS THE SPEED?/]
; READCH A
; SUBI A,"0"
; DPB A,[POINT 3,OUTBIT,32]
PLA2: SETZM FILBLK+3
SETZM FILBL2+3
LOOKUP DSKCHN,FILBLK
SKIPA ;CAN'T FIND MUSIC.MUS
JRST XOPEN ;FOUND IT
LOOKUP DSKCHN,FILBL2 ;TRY FOR MUSAA.DMD
JRST [MESSAGE[ASCIZ/
*** MUSIC FILE NOT FOUND/]
CALLI 12]
;EXIT IF FILE IS MISSING
MOVE A,FILBL2+3 ;GET LENGTH OF MUSAA.DMD
MOVEM A,FILBLK+3;PUT IT IN RIGHT PLACE
XOPEN: OPEN ADCHN,[117 ;MODE
; 'AD ' ;DEVICE NAME
'XGP ' ;DEVICE NAME
0] ;NO BUFFER HEADERS
JRST [MESSAGE[ASCIZ/
***XGP NOT AVAILABLE/]
CALLI 12]
;EXIT IF D-A IS UNAVAILABLE
SPWAR: SPCWAR 17,[CALLI]
MESSAGE [ASCIZ/ GO? /]
READCH A
LNTH: movs a,filblk+3 ;get length of file.
movnm a,nwd
; -----------------------------------------
;BEGIN MAIN BODY OF PROGRAM
LOOP: JSP RET,SUB ;ROUTINE TO READ AND WRITE
BUF1-1 ;USE BUF1 FOR THE I/O
JUMPLE B,OUT ;DONE
JSP RET,SUB ;CALL IT AGAIN
BUF2-1 ;USE BUF2 FOR THE I/O
JUMPG B,LOOP ;GO BACK FOR MORE IF B>0
OUT: close dskchn, ;END OF PROGRAM.
releas adchn,
SPCWAR 0,'SSW'
jrst lx
;SUBROUTINE TO SET UP IOWD AND READ AND WRITE.
; 1(RET) WILL BE THE RETURN
; 0(RET) WILL BE THE ADDRESS OF THE BUFFER TO BE
; PUT IN THE RIGHT HALF OF THE IOWD.
; A WILL BE A WORK REGISTER
; B WILL BE TESTED ON THE OUTSIDE.
SUB: MOVNI A,BUFSIZ ;PICK UP AND COMPLEMENT BUFSIZ
ADDB A,NWD ;A←NWD-BUFSIZ
;NWD←NWD-BUFSIZ
MOVE B,A ;SAVE B TO BE TESTED FOR LAST
;TIME.
JUMPL A,LAST ;SET UP FOR LAST TIME.
MOVEI A,0
;THE IOWD LOOKS LIKE:
; [-BUFSIZ / BUFI-1]
LAST: ADDI A,BUFSIZ
MOVNS A ;COMPLEMENT A
HRL A,0(RET) ;PICK UP BUFI AND MOVE IT
;TO THE LEFT SIDE OF A.
MOVSM A,INLIST ;SWAP A AND MOVE IT.
MOVSM A,OUTWC ;SAME FOR OUTPUT.
INPUT DSKCHN,INLIST ;READ A RECORD.
OUTPUT ADCHN,OUTWC ;WRITE THE RECORD.
JRST 1(RET) ;RETURN
; -----------------------------------------
; STORAGE:
NWD: 0 ;FOR NUMBER OF WORDS OF INPUT.
↓BUF1: BLOCK BUFSIZ+1 ;BUFFER 1
BUF2: BLOCK BUFSIZ+1 ;BUFFER 2
FILBLK: 'MUSIC ' ;FILENAME FOR INPUT
'MUS ' ;EXTENSION
0 ;INFORMATION ON FILE
0 ;PROJECT PROG#
FILBL2: 'MUSAA ' ;FILENAME FOR INPUT, 2ND CHOICE
'DMD ' ;EXTENSION
0 ;INFORMATION ON FILE
0 ;PROJECT PROG#
CLIST: IOWD 1,NWD ;FOR THE FIRST RECORD
0
INLIST: 0 ;WILL CONTAIN AN IOWD
0
OUTWC: 0 ;WILL CONTAIN AN IOWD FOR D-A
0
; 3650 ;MAGIC BITS FOR 136.
OUTBIT: 4000 ;BITS FOR D-A
BLOCK 2
begin magdsk
A←1
B←2
D←3
OLNG←=2432 ;size of mag tape records. must be multiple of =128.
ILNG←=2432
ichn←adchn
ochn←dskchn
↑START: CALLI 0
INIT ICHN,3B28+17
SIXBIT /MTA0/
0
HALT
MTAPE ICHN,1 ;REWIND THE TAPE
JFCL
INIT OCHN,17
SIXBIT /DSK/
0
HALT
ENTER OCHN,[SIXBIT /MUSIC/
SIXBIT /MUS/
0
0]
HALT
loop:input ichn,olst
statz ichn,20000
jrst out ;end of tape.
output ochn,olst
jrst loop
OLST: IOWD OLNG,OBUF
0
obuf←← buf1
bend magdsk
end beg